From 88b9531ce008cddb564e2a611280e693d55fda77 Mon Sep 17 00:00:00 2001 From: Jake Wires Date: Wed, 21 Feb 2007 18:38:11 -0800 Subject: [PATCH] [BLKTAP] fix sysfs cleanup on error case Signed-off-by: Jake Wires --- linux-2.6-xen-sparse/drivers/xen/blktap/xenbus.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/linux-2.6-xen-sparse/drivers/xen/blktap/xenbus.c b/linux-2.6-xen-sparse/drivers/xen/blktap/xenbus.c index 14a8dd4041..1b4bda2184 100644 --- a/linux-2.6-xen-sparse/drivers/xen/blktap/xenbus.c +++ b/linux-2.6-xen-sparse/drivers/xen/blktap/xenbus.c @@ -47,6 +47,7 @@ struct backend_info blkif_t *blkif; struct xenbus_watch backend_watch; int xenbus_id; + int group_added; }; @@ -150,7 +151,12 @@ static struct attribute_group tapstat_group = { int xentap_sysfs_addif(struct xenbus_device *dev) { - return sysfs_create_group(&dev->dev.kobj, &tapstat_group); + int err; + struct backend_info *be = dev->dev.driver_data; + err = sysfs_create_group(&dev->dev.kobj, &tapstat_group); + if (!err) + be->group_added = 1; + return err; } void xentap_sysfs_delif(struct xenbus_device *dev) @@ -174,7 +180,8 @@ static int blktap_remove(struct xenbus_device *dev) tap_blkif_free(be->blkif); be->blkif = NULL; } - xentap_sysfs_delif(be->dev); + if (be->group_added) + xentap_sysfs_delif(be->dev); kfree(be); dev->dev.driver_data = NULL; return 0; -- 2.30.2